1章 イーサリアムとは何か?
akht.icon
どういう意味?
ぼくはなんかのタイミングで「そういうことか!」ってなったんだよな june29.icon
コンピュータサイエンスの観点から見たイーサリアム
決定論的であるものの実質的に制約のない状態マシン
次の2つで構成される
グローバルにアクセス可能なシングルトン状態(単一の状態)
その状態に変更を加える仮想マシン
実用的な観点から見たイーサリアム
ブロックチェーンを使ってシステムの状態変化を同期して保存
プログラム実行のための資源コストを測定・制限するためにEther(暗号通貨)を使う
プラットフォームとしての特徴
これらを提供する
高い可用性
監査可能性
透明性
中立性
検閲されづらい
イーサリアムは他のオープンブロックチェーンと共通するものがありつつも目的と構造が大きく異なる
共通する要素
色々
目的(異なる)
デジタル通貨の決済ネットワークになることではない
デジタル通貨としてEtherはユーティリティ通貨として使われることを意図してる
イーサリアムの運営に必要である
プラットフォームの利用料を支払う
構造(異なる)
仮想マシンを動かすことができる
任意でめちゃ複雑なコードでも実行できる(チューリング完全)
汎用的でプログラム可能なブロックチェーンとして設計されてる
※ビットコインもスクリプトを実行できるがあんまり色々はできない(と読める)
使用条件に関する単純な真偽判定(に意図的に限定されてる)
イーサリアムは汎用コンピュータとして機能する
1.2 ブロックチェーンの構成要素
ブロックチェーンの構成要素
P2Pネットワーク
状態遷移を表すメッセージ
コンセンサスルール
トランザクションを処理する状態マシン
状態遷移のジャーナルとして機能するブロック
コンセンサスアルゴリズム
インセンティブスキーム
クライアント
ブロックチェーンというのは↑の特徴を全て含む技術の組み合わせの略語として使われてる
イーサリアムではリファレンス実装というよりもイエローペーパーに仕様が記述されている
ブロックチェーンの特徴
オープン
パブリック
グローバル
非中央集権(decentralized)
中立性(neutral)
検閲耐性(censorship-resistant)
ひとくちに「ブロックチェーン」と言ってもそれが全て同じものを指しているとは限らない
1.3 イーサリアムの誕生
ビットコインモデルの有効性は認識していて、これをさらに進化させたい
ビットコイン上で開発するか?新しいブロックチェーンを始めるか?
ビットコイン上で開発=制約に従わなくてはならない、制限が多い
他のブロックチェーン=追加的にオフチェーンレイヤーを必要とする=パブリックブロックチェーンの多くが利点が失われる
オンチェーンかつ自由度と柔軟性が欲しい=新しいブロックチェーンを構築するしかない
だがとても大変、その大変なことをヴィタリックがやってのけた
最初はビットコインを拡張したものを提案したが、受け入れられなかった(既存の開発ロードマップ的に厳しい)
2013年12月、ヴィタリックがチェーリング完全な汎用ブロックチェーンであるイーサリアムのホワイトペーパーを公開
それを読んだ人たちの協力もあって発展していった
イーサリアムの創設者たちは
特定の目的を持たない
ブログラムで幅広い種類のアプリケーションをサポートできるブロックチェーン
について考えていた
イーサリアムのような汎用ブロックチェーンを用いることで
P2Pネットワーク、ブロックチェーン、コンセンサスアルゴリズム
のような基礎的な仕組みを開発者自身が実装することなくアプリケーションを開発できるようになるというもの
イーサリアムプラットフォームは、非中央集権型のブロックチェーンアプリケーションのための決定論的で安全なプログラミング環境を提供するために設計された
決定論的?
そして2015/7/30、最初のイーサリアムのブロックがマイニングされた
1.4 イーサリアムの4つの開発段階
イーサリアムの4つの段階
核開発段階にはハードフォーク(= 後方互換性のない方法で機能を変更する)が含まれることもある
4つの主要開発段階コードネーム:フロンティア、ホームステッド、メトロポリス、セレニティ
中間ハードフォーク:アイスエイジ、DAO、タンジェリンホイッスル、スプリアスドラゴン、ビザンチウム、コンスタンティンのーぷる
1.5 イーサリアム:汎用ブロックチェーン
ビットコイン
個々のブロックとその所有の状態を追跡する
トランザクションがグローバルな状態遷移を引き起こし、コインの所有を変更するような分散型コンセンサス状態マシンとして考えることができる
状態遷移(state transition)がコンセンサスルールに服することで、数ブロックがマイニングされたあとは、すべての参加者がシステムの共通(コンセンサス)状態に最終的には収束する
イーサリアム
分散型状態マシンでもある
しかし、通過の所有だけではなく汎用データストアの状態遷移も追跡する
汎用データストア=キー・バリューのタプルで表現可能なデータ
コードとデータの両方を格納するメモリがある
そのメモリがどう変化するか追跡する
状態マシンにコードをロードして実行し、状態変化の結果をブロックチェーンに格納できる
汎用コンピュータとの違い
状態変化がコンセンサスルールによって管理されること
その状態がグローバルに分散されていること
1.6 イーサリアムの構成要素
P2Pネットワーク(TCPポート番号30303)
コンセンサスルール
トランザクション
状態マシン
イーサリアム仮想マシン(Ethereum Virtual Machine: EVM)で処理される
↑スタックベースの仮想マシンでバイトコードを実行する
このバイトコードはSolidityなどで記述したものをコンパイルしたもの
データ構造
マークルパトリシアツリーでトランザクションとシステムの情報を保管
コンセンサスアルゴリズム
経済的な安定
クライアント
Geth, Parityなど
イーサリアムはチューリング完全
イーサリアムの革新性
汎用コンピューティングアーキテクチャと、非中央集権型ブロックチェーンを組み合わせて、分散型の単一状態ワールドコンピュータを想像したこと
1.7.1 「仕様」としてのチューリング完全
1.7.2 チューリング完全性の意味
チューリング完全であることで危険性をはらむ
チューリング完全=どれだけ複雑なプログラム(スマートコントラクト)でも計算できる
しかし停止性問題は解けないため、計算が終わるかどうか事前に判定できない
実際に実行してみないとわからない
これはパブリックブロックチェーンでは危険(セキュリティ・リソース管理的に)
ではどのようにリソースを抑制するのか?
ガス(gas)という計算に必要なコストが導入されている
スマートコントラクトを実行するにはガスを消費しなければならず、利用可能なガスを使い切ればEVMは実行を終了する
ガスにより、リソース抑制とチューリング完全な計算を両立させている
1.8 汎用ブロックチェーンから非中央集権型アプリケーション(DApp)へ イーサリアムはDAppをプログラミングするためのプラットフォームになるところまで拡大してる
DApp = オープンで非中央集権型のP2Pインフラサービスの上に構築されたWebアプリケーション
DAppの構成要素
ブロックチェーン上のスマートコントラクト
Webユーザーインターフェイス
P2Pストレージプロトコルとプラットフォーム
P2Pメッセージングプロトコルとプラットフォーム
1.9 インターネットの第3世代
Webアプリケーションのあらゆる側面にP2Pプロトコルを伴った非中央集権性を導入しwwwを次の進化のステージに導く
中央集権から非中央集権へ
web3.js
1.10 イーサリアムの開発カルチャー
ビットコインは割と保守的な開発カルチャー
イーサリアムは「素早く動いて、ぶっ壊す(move fast and break things)」
開発者は基本的な前提が変わっても柔軟性を持ちつつインフラを再構築できるように準備しないといけない
矛盾がある
コードを変更可能なシステムにデプロイすること
進化し続ける開発プラットフォーム
プラットフォームを進化させるためにはスマートコントラクトを再起動したりやり直す準備が必要で、完全に非中央集権化できない、つまりある程度はコントロールする必要がある
プラットフォームがもっと安定すればこの問題はなくなる
1.11 なぜイーサリアムを学ぶのか?
ブロックチェーンはこれらの分野を含む
ブログラミング
情報セキュリティ
暗号学
経済学
分散システム
P2Pネットワーク
↑多いし難しい
それでもイーサリアムは学習の難易度を大幅に下げている
しかも巨大なコミュニティもある(ので学びやすい)
1.12 本書で学べること
イーサリアムをマスターできる
hr.icon
次章!